iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
自我挑戰組

保健食品建議量查詢網頁功能系列 第 8

網路爬蟲,請記得低調有禮貌

  • 分享至 

  • xImage
  •  

當收集網頁資料時,若是因為項目很多時,大多時後是用爬蟲來抓。參考wiki:
https://zh.wikipedia.org/zh-tw/%E7%B6%B2%E8%B7%AF%E7%88%AC%E8%9F%B2

雖然說網站/資訊提供者把網頁公開(不用login)放到網路上就是允許給人看,但是因為程式的操作,比起人為操作加上瀏覽器反應時間來說,頻率就差很多。而有的伺服器(硬體/網路)可能體質不太好,有可能因為爬蟲,或機器人造成服務明顯延遲或斷掉,超低成本用別人的東西,還把別人的東西用壞,這樣真的說不過去。而且該怎麼說呢,引起網站網管的注意,開始嚴防,對爬蟲者也沒什麼好處,才抓到一半被擋了後面不就更辛苦?!

在實作爬蟲,我個人習慣的步驟是:

  1. 了解網頁路徑相關結構,與網頁的內容,一開始不用急著寫程式,用瀏覽器,人眼,跟筆記本把作業分析完成。內容應包含要抓的網址pattern順序,還有range,大概可以知道要抓幾次,連線時間會多久。

  2. 使用網頁debug工具,配第三方工具開始試著看那裡有網頁所需資料,以一般純對外的公開官網來說,大部份資料還是透過後端直接產生HTML(這要感謝大量的wordpress市佔嗎?!)。json跟js加工拿資料的還是少數。

    • 大部份網站都會認瀏覽器來源,所以要有偽裝資訊,firefox 的開發者工具可以產出curl 的參數設定
      https://i.stack.imgur.com/JnBnR.png
      (資料來源stack overflow:https://stackoverflow.com/questions/15333660/how-can-i-use-curl-to-simulate-a-request-from-firefox-over-a-proxy )
    • 近年比較喜歡用curl。windows,linex 都有的工具,指令參數一致
  3. 寫爬蟲程式。

    • 用Java Runtime execute 下curl 指令去呼叫,因我不會寫shell,用Java Runtime execute相對熟悉好控制,也不用額外引用lib。curl 指令本身已經在上一步驟確認過,九成不會出問題,要是出問題,也很快的有對照組來找bug。
    • 抓下來的內容寫檔到本機原始資料放置區。
      • 內容解析會用另外的程式再掃過內容原始檔,主要是為了發生錯誤時,不用再上網爬一次原始內容。也不怕初步過濾出了問題有什麼內文不見了。
      • 若檔案數量很多,上千上萬個時,還是拆一下folder存放會比較好。因為有需要人眼開原始資料對資料時,檔案瀏覽器才不會效率差到掛。
    • 實做抓資料的頻率。這個就是要注意低調,有禮貌的部份。通常我會先看全部預計大概多少筆資料再說。我通常是模擬我平常看網頁更新的速度,一分鐘抓 2~4筆 的頻率為主。
      • 間隔 sleep 時間,可以用Random 就可以跑個亂數時間秒數,比較不會那麼假
      • 因為資料前處理,或功能開發都可以多利用第二步研究期的 sample 就下去做解析與後續應用,等有可行性後,再開始爬蟲定時抓。
      • 資料準備都是在工作/專案初期,就算每天抓幾千筆,多抓個幾天(也不會影響專案進度)也是幾萬筆。當然也可以逐步測試對象伺服器的忍受度,但畢竟不是遊戲,不會有個警戒值顯示給你看,重點是不要驚動伺服器就好。
      • 頻率低一點,就算是上班時間,開起來也不會有什麼電腦loading感覺。若是有要短時間快速抓大量(幾十萬筆)資料的話,可以考慮多找幾台外部IP不同的去發(公司內網N台還是同一個對外IP,被封就麻煩了),因為防火牆判定通常最簡單就是看來源IP。
    • 可以加一些基本的輸出 log,回頭看的時後可以知道抓到那。
      • 通常可以加註抓到第幾筆(斷掉的話才知道要重那邊開始)
      • 取得資料大小,明顯過低就知道要去看為什麼。
      • 記錄單筆抓花了多少ms

大概就降子,爬蟲都是小程式而已,不需要重頭到尾什麼都靠Java硬幹,借力使力也是很方便的。


上一篇
Good Input, Good Output
下一篇
萬用的JSON,要怎麼加工都可以
系列文
保健食品建議量查詢網頁功能30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言